本文主要介绍如何导入Spring源码及遇到的小问题。
絮叨
最近准备开始逐步深入学习Spring源码,遂着手学习借阅已久的《Spring源码深度解析》这本书,但是到了第二章导入源码部分的时候碰到了小问题,本想借助度娘的力量轻松解决,但查阅资料都没能很好的解决我的问题(可能本人水平太低-_-|||,有些地方大神们以为很简单不值一提,一笔带过),然后结合大神博客里的方法,加上自己摸索算是解决了此问题吧。
特在此处mark一下,记录此问题方便以后查阅,同时能对同样问题的小伙伴有所启发也是极好的。
导入项目
按照书上的解释,同时编译整个Spring项目耗时耗资源,不建议采用,因此选择按照需求编译需要阅读源码的模块。
准备工作
在安装JDK1.8之后,安装gradle(据说gradle比maven更有优势,心向往之)。Java安装配置不再赘述,gradle的配置也类似于maven,下载-解压-配置路径。具体此处不再描述。
下载Spring源码
之后前往github下载Spring源码(或者通过git clone方式下载代码,当然前提是电脑里此时已经安装了github客户端或者类似的工具),可以选择下载mater分支,或者点击Tags选择release版本。
注:书上提供的git地址是springsource而不是此处的spring-project。应该是这里的为准。反正我是从这里下载的+_+。
编译及导入
然后在本地解压项目压缩包,选择需要阅读的模块目录,编译即可。
按照spring架构,spring-core、Beans等属于基础模块,书本推荐由浅入深了解,此处选择spring-beans,但beans模块依赖core,并且两者的问题均类似,缺少jar包,所以此处以beans举例说明问题。
在spring-core目录中点击上方的文件-打开命令提示符(或者win+R,然后输入cmd
,回车,然后一步步cd
切换至该目录)。
ps:win10及之前的win8好像都支持这样操作。
在命令窗口中输入gradle cleanidea eclipse
即可编译该模块并导入到eclipse中(import-General-Existing project into Workspace
)。
此时就出现本文的重点了:eclipse中项目上出现感叹号,然后项目右击-Build path-Config build path
,在出现的第三个Libraries的tab中,发现提示错误,并且按照网上的很多方法没能很好的解决我的问题。
然后在Windows-show view-problems
发现提示以下错误。
问题描述
Project 'spring-core' is missing required library: '...spring-framework-master\spring-core\build\libs\spring-cglib-repack-3.2.0.jar'
Project 'spring-core' is missing required library: '...spring-framework-master\spring-core\build\libs\spring-objenesis-repack-2.2.jar'
The project cannot be built until build path errors are resolved
解决方法
原因及下载jar包
关于问题及出现的原因此文也有描述,请参考。通过阅读源码发现为了避免第三方class的冲突,spring把最新的cglib和objenesis给repack了
参考文章:关于创建spring源码环境时遇到的缺少spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar两个包的问题
及所需的jar包(非常感谢,不用非得消耗可恶的硬币)。
spring-cglib-repack-3.2.0.jar
spring-objenesis-repack-2.2.jar
按照错误提示,需要将jar包放入指定的文件夹。
在spring-core目录下新建build
文件夹,并在文件夹中新建lib
文件夹,将下载的jar包放入文件夹内,最终如下:
下载及放置jar包都没问题,关键是后面怎么做,让我这菜鸟很是烦恼,百般尝试后终于解决(泪奔ing)。
配置
回到刚才的项目右击-Build path-Config build path
,然后在Libraries
tab下选中出错的jar包,点击右侧的edit,切换目录至spring-core/build/lib/
文件夹下,选中对应的刚刚放置好的jar包,两个jar包均这么做。然后apply,OK即可。
然而这样的话,后面的其他出现类似问题的项目每次都要这么解决,很是麻烦。希望有更好的解决方法的朋友分享你的方法,感谢。
至此问题圆满解决。
后面是小插曲,觉得蛮有意思的,特此记录。
小插曲
突然发现spring-framework-4.2.5.RELEASE
版本居然没问题,之前在master分支直接下载的源码,进行完上述步骤后出现了下面的问题:
方法内部:
具体问题:
错误1:
错误2:
Done
2016年3月2号,下午两点,再去github查看master分支的源码,发现问题已经解决。
为大神们撒花~